Python OrderedDict 不保持元素顺序
全部标签 我真的很想在没有猴子补丁的情况下处理这个问题,但我还没有找到其他选择。我有一个数组(在Ruby中),我需要按多个条件对其进行排序。我知道如何使用sort方法,并且我已经使用了使用选项数组按多个条件进行排序的排序技巧。但是,在这种情况下,我需要第一个条件进行升序排序,第二个条件进行降序排序。例如:ordered_list=[[1,2],[1,1],[2,1]]有什么建议吗?编辑:刚刚意识到我应该提到我不能轻易地比较第一个值和第二个值(我实际上是在处理对象属性)。所以对于一个简单的例子,它更像是:ordered_list=[[1,"b"],[1,"a"],[2,"a"]]
我需要一种非常快速的方法来确定数组是否仅由值为9的整数组成。这是我目前的解决方案:input=[9,9,9,9,9,9,9,9,9,9,9,9]input.uniq==[9]你能做得更快吗? 最佳答案 require'benchmark'n=50000Benchmark.bmdo|x|x.report"uniq"don.timesdoinput=[9,9,9,9,9,9,9,9,9,9,9,9]input.uniq==[9]endendx.report"delete"don.timesdoinput=[9,9,9,9,9,9,9,9
有什么办法可以更优雅地重写这个吗?我认为,这是一段糟糕的代码,应该重构。>>a=[2,4,10,1,13]=>[2,4,10,1,13]>>index_of_minimal_value_in_array=a.index(a.min)=>3 最佳答案 我相信这只会遍历数组一次并且仍然很容易阅读:numbers=[20,30,40,50,10]#=>[20,30,40,50,10]elem,idx=numbers.each_with_index.min#=>[10,4] 关于Ruby:如何找
我正在学习each如何在ruby中工作的细节,我尝试了以下代码行:p[1,2,3,4,5].each{|element|el}结果是一个数组[1,2,3,4,5]但我不认为我完全理解为什么。为什么each的返回值是同一个数组?每个人不只是提供一种迭代方法吗?或者只是each方法返回原始值的常见做法? 最佳答案 Array#each返回调用它的[array]对象:block的结果是discarded。因此,如果原始数组没有icky副作用,那么什么都不会改变。也许你的意思是使用map?p[1,2,3,4,5].map{|i|i*i}
我正在尝试按键按字母顺序对哈希进行排序,但如果不创建我自己的排序类,我似乎无法找到一种方法来做到这一点。如果它是一个整数,我发现下面的代码按值排序,我试图修改它但没有任何运气。temp["ninjas"]=36temp["pirates"]=12temp["cheese"]=222temp.sort_by{|key,val|key}我的目标是按键排序哈希,然后输出值。我将不得不使用不同的哈希顺序但相同的值多次执行此操作。 最佳答案 假设您希望输出是一个散列,它将按排序顺序遍历键,那么您就快完成了。Hash#sort_by返回一个Ar
我有一行文字thisistheline如果该数组中的元素之一,我想返回true:['hey','format','qouting','this']是上面给出的字符串的一部分。因此对于上面的行,它应该返回true。对于这一行hellomynameismartin它不应该。我知道include?但我不知道如何在这里使用它(如果它有帮助的话)。 最佳答案 >>s="thisistheline"=>"thisistheline">>['hey','format','qouting','this'].any?{|w|s=~/#{w}/}=>t
在Ruby中,以修改某些元素而其他元素保持不变的方式映射数组的最具表现力的方法是什么?这是一种直接的方法:old_a=["a","b","c"]#["a","b","c"]new_a=old_a.map{|x|(x=="b"?x+"!":x)}#["a","b!","c"]当然,如果还不够的话,省略“leave-alone”的情况:new_a=old_a.map{|x|x+"!"ifx=="b"}#[nil,"b!",nil]我想要的是这样的:new_a=old_a.map_modifying_only_elements_where(Proc.new{|x|x=="b"})do|y|y
即使来自javascript,这对我来说也很糟糕:irb>>a=['a','b','c']=>["a","b","c"]>>a.unshift(a.delete('c'))=>["c","a","b"]有没有更清晰的方法将元素放在数组的前面?编辑我的实际代码:if@admin_users.include?(current_user)@admin_users.unshift(@admin_users.delete(current_user))end 最佳答案 也许这对你来说更好看:a.insert(0,a.delete('c'))
我有一个这样的数组:["marblecake","also","the",1337]我想取回一个字符串,该字符串包含以某个指定字符串为前缀的数组的每个元素,然后由另一个指定字符串连接在一起。例如,["marblecake","also","the",1337].join_with_prefix("%","__")应该导致#=>%marblecake__%also__%the__%1337我该怎么做? 最佳答案 如果你的数组在a中,那么这个单行代码就可以了a.map{|k|"%#{k}"}.join("_")您可以轻松地将它放入您自己
众所周知,Array#compact从数组中删除了nil元素。array.reject{|元素|元素.空?}会删除像[]这样的空元素(在rails中你也可以使用#blank?来删除空元素和无元素)。有没有像Array#compact这样的删除空/空白元素的简写方法?还是使用Array#reject是我最好的选择?我还没有看到#compact的“空”等价物,如果有的话。但也许我只是忽略了它。 最佳答案 是的!array.reject&:empty?然而,作为scarver2和HoangLe解释说,这将失败并显示NoMethodErro